Typically, storage systems are unaware of virtual machines (VMs). Instead, a typical system receives file system requests (e.g., create file, read, write, etc.) and performs such requests without any awareness of which requests are associated with which VM.
Storage quality of service (QoS) can be categorized into two main areas of study: 1) space sharing and 2) performance sharing. Two important use-cases of the performance sharing aspect “performance isolation” and “performance protection.”
Performance isolation refers to isolating one storage system resource consumer's I/O traffic from another storage system resource consumer's I/O traffic. This may be important in virtualized environments because multiple VM users can run different kinds of applications and one VM user should not be affecting the I/O performance of other VM user. However, performance isolation on per-VM basis is not available natively with typical storage systems, since they are not aware natively of which I/O requests are associated with which VM's.
Performance protection refers to providing service levels in a storage environment where service-providers charge the end-user based on one or more predefined performance consumption metrics. Performance service levels on a storage system resource consumer may be assigned, for example, by setting a minimum and a maximum cap on performance metrics, like IOPS or throughput. A minimum cap on a resource consumer guarantees at least the specified performance service level for the resource consumer and a maximum cap on a resource consumer guarantees no more than the specified performance service level for the resource consumer. At times, service levels are used to solve the notorious noisy neighbor problem, where a resource consumer monopolizes the consumption of storage I/O resources and thus depriving other resource consumers of performance.
User expectations from guaranteed service levels are heavily dependent upon how much system resources are available. Every storage appliance has an upper limit on the performance that it can deliver. Hence, storage QoS should be able to inform the user if he/she has overprovisioned the storage system on performance.
Performance protection also gives rise to a set of complexities where some resource consumers have service levels set and some other do not have any service levels set. This can cause an imbalance between system performance resource allocations, which could lead to starvation.
Using the right performance metric may be critical in setting per-VM storage QoS policies of minimum and maximum. While IOPS is a widely used metric, IOPS does not gauge the performance measures correctly. This is because the I/O request sizes of VMs can differ and hence, throughput may be a more realistic performance gauge. However, users may be more familiar with IOPS as a measure of performance.